// Node.js 文件系统
const fs = require('fs');

// 异步的 fs.readFile() 和同步的 fs.readFileSync()


fs.readFile('./static/demo14input.txt', function (err, data) {
    if (err) {
        return console.error(err);
    } else {
       console.log(`1.异步读取： ${data.toString()}`)
    }
});

let data = fs.readFileSync('./static/demo14input.txt');
console.log(`1.同步读取：${data}`);


// 打开文件,异步模式下打开 fs.open(path, flags[, mode], callback)

console.log('准备打开文件==========');
fs.open('./static/input.txt', 'r+', (err, data) => {
    if (err) {
        return console.error(err);
    }
    console.log('文件打开成功！！！');
    console.log(data) // 4
});



// 获取文件信息 fs.stat(path, callback)
fs.stat('./static/input.txt', (err,data) => {
    if (err) {
        return console.error(err);
    }
    console.log('文件读取成功！');
    console.log(data);

    // 检测文件类型
    console.log(`是否为文件： ${data.isFile()}`);
    console.log(`是否为目录： ${data.isDirectory()}`);
    console.log(`是否为块设备： ${data.isBlockDevice()}`);
    console.log(`是否为软连接： ${data.isSymbolicLink()}`);
});


// 写入文件：异步模式下写入fs.writeFile(file, data[, options], callback)回调函数只包含错误信息
console.log("准备写入文件");
fs.writeFile('./static/demo14write.txt', '我是writeFile写入的数据', (err) => {
    if (err) {
        return console.error(err);
    }
    console.log("数据写入成功！");
    console.log("--------我是分割线-------------")
    console.log("读取写入的数据！");
    fs.readFile('./static/demo14write.txt', function (err, data) {
        if (err) {
            return console.error(err);
        }
        console.log("异步读取文件数据: " + data);
    });
});


// 读取文件,异步模式下读取: fs.read(fd, buffer, offset, length, position, callback)
/*
* fd - 通过 fs.open() 方法返回的文件描述符。
* buffer - 数据写入的缓冲区。
* offset - 缓冲区写入的写入偏移量。
* length - 要从文件中读取的字节数。
* position - 文件读取的起始位置，如果 position 的值为 null，则会从当前文件指针的位置读取。
* callback - 回调函数，有三个参数err, bytesRead, buffer，err 为错误信息， bytesRead 表示读取的字节数，buffer 为缓冲区对象。
* */
let buf = new Buffer.alloc(1024);
console.log('准备打开已存在的文件！');

fs.open('./static/input.txt', 'r+', (err, data) => {
   if (err) {
       return console.error(err)
   }
    console.log("文件打开成功！");
    console.log("准备读取文件：----------");
    fs.read(data, buf, 0, buf.length, 0 ,(err, bytes) => {
        if (err){
            console.log(err);
        }
        console.log(bytes + "  字节被读取");

        // 仅输出读取的字节
        if(bytes > 0){
            console.log(buf.slice(0, bytes).toString());
        }
        // 关闭文件
      fs.close(data, function(err){
         if (err){
            console.log(err);
         }
         console.log("文件关闭成功");
      });
    })
});



